//
//  FriendCircleVM.swift
//  jiahui
//
//  Created by 3tee on 2024/12/12.
//

import Foundation
import UIKit
class FriendCircleVM: NSObject {
    var models = [FriendCricleModel]()
    
    let nameH: CGFloat = 16
    let padding: CGFloat = 15
    let iconW: CGFloat = 36
    let margin: CGFloat = 8
    
    func mockData() -> [FriendCricleModel]{
        let model1 = FriendCricleModel(icon:"lady", name: "capybara", content: "卡皮巴拉以其呆萌可爱的形象和情绪稳定而著称，被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年", mediaType: "", medias: [], time: "11:58")
        models.append(model1)
        
        let model2 = FriendCricleModel(icon:"male", name: "1张图", content: "卡皮巴拉以其呆萌可爱的形象和情绪稳定而著称，被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。", mediaType: "2", medias: ["plaza_top_box1"], time: "11:58")
        models.append(model2)
        
    
        
        let model3 = FriendCricleModel(icon:"male", name: "4张图", content: "卡皮巴拉以其呆萌可爱的形象和情绪稳定而著称，被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。", mediaType: "2", medias: ["plaza_top_box1","plaza_top_box2","plaza_top_box3","plaza_top_box4"], time: "11:58")
        models.append(model3)
        
        let model4 = FriendCricleModel(icon:"male", name: "1个视频", content: "卡皮巴拉以其呆萌可爱的形象和情绪稳定而著称，被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，十分佛系的状态。", mediaType: "3", medias: [""], time: "11:58")
        models.append(model4)
        
        let model5 = FriendCricleModel(icon:"male", name: "3张图", content: "卡皮巴拉以其呆萌可爱的形象和情绪稳定而著称被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。，被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。", mediaType: "2", medias: ["plaza_top_box2","plaza_top_box4","plaza_top_box2"], time: "11:58")
        models.append(model5)
        
        let model6 = FriendCricleModel(icon:"male", name: "4张图", content: "卡皮巴拉以其呆萌可爱的形象和情绪稳定而一副安安静静，半睁着眼睛，十分佛系的状态。", mediaType: "2", medias: ["plaza_top_box4","plaza_top_box2","plaza_top_box3","plaza_top_box4"], time: "11:58")
        models.append(model6)
        
        let model7 = FriendCricleModel(icon:"male", name: "5张图", content: "卡皮巴拉以其呆萌可爱的形象和情绪稳定而著称，被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。", mediaType: "2", medias: ["plaza_top_box2","plaza_top_box4","plaza_top_box1","plaza_top_box2","plaza_top_box3"], time: "11:58")
        models.append(model7)
        
        let model8 = FriendCricleModel(icon:"male", name: "6张图", content: "卡皮巴拉以其呆萌可爱的形象和情几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。", mediaType: "2", medias: ["plaza_top_box4","plaza_top_box2","plaza_top_box3","plaza_top_box4","plaza_top_box2","plaza_top_box1"], time: "11:58")
        models.append(model8)
        
        let model9 = FriendCricleModel(icon:"male", name: "9张图", content: "卡皮巴拉以其呆萌可爱的形象和情绪稳定而著称，被誉为动物界的被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。", mediaType: "2", medias: ["plaza_top_box4","plaza_top_box3","plaza_top_box4","plaza_top_box1","plaza_top_box4","plaza_top_box3","plaza_top_box4","plaza_top_box2","plaza_top_box1"], time: "11:58")
        models.append(model9)
        
        let model10 = FriendCricleModel(icon:"lady", name: "2张图", content: "卡皮巴拉以其呆萌可爱的形象和情绪稳定而著称，被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。被誉为动物界的新顶流。它们被描述为松弛自在、与世无争、情绪稳定，精神状态领先三十年，水豚具有社交性，通常以家族为单位生活，群体规模从几只到几十只不等。它们被称为“佛系动物”，无论呆在什么地方，呆在什么动物身边，都是一副安安静静，半睁着眼睛，十分佛系的状态。", mediaType: "2", medias: ["plaza_top_box3","plaza_top_box4",], time: "11:58")
        models.append(model10)
        
        models.forEach { model in
            
            var contentH: CGFloat = contentHeight(model.content)
            //按照一行高度20 计算，当高度超过5行需要显示全文按钮
            var openBtnH: CGFloat = 40
            if ceil(contentH / 20 ) > 5{ //显示全文按钮
                openBtnH = 25
                if model.isOpen == true { //展开情况下重新计算contentH
                    contentH = contentHeight(model.content)
                }else{
                    contentH = 20 * 5
                }
            }else{
                openBtnH = 0
                contentH = contentHeight(model.content)
            }
            model.contentHeight = contentH
//            var w = screen_width - iconW
//            w = w - margin * 3 - padding * 2
           //计算media的高度
            if model.medias.count != 0{
                if model.mediaType == "2" { //图片
                    if model.medias.count == 1 {
                        model.collectionItemSize =  CGSize(width: 150, height: 200)
                        model.collectionHeight = 200
                    }else if model.medias.count == 2  || model.medias.count == 4{
                        let w = screen_width - iconW - margin * 3 - padding * 2

                        model.collectionItemSize =  CGSize(width: w / 2 , height: w / 2)
                        if model.medias.count == 2 {
                            model.collectionHeight = w / 2
                        }else{
                            model.collectionHeight = w
                        }
                    }else{
                        let w = screen_width - iconW - margin * 3 - padding * 2
                        model.collectionItemSize =  CGSize(width: w / 3 , height: w / 3)
                        if model.medias.count == 3 {
                            model.collectionHeight = w / 3
                        }else if model.medias.count == 5 || model.medias.count == 6 || model.medias.count == 7{
                            model.collectionHeight = w / 3 * 2
                        }else {
                            model.collectionHeight = w / 3 * 3 + margin * 2
                        }
                    }
                    
                }else{//视频
                    model.collectionItemSize = CGSize.init(width: 186, height: 280)
                    model.collectionHeight = 280
                }
            }else{
                model.collectionHeight = 0
            }
            
            model.cellHeight = contentH + nameH + padding * 3 + openBtnH + model.collectionHeight 
        }
        
        return models
    }
    
    func contentHeight(_ content: String) -> CGFloat {
         let width = screen_width - 15 * 2 - 36 - 8
         return calculateTextHeight(for: content, width: width)
    }
    
    func height(withConstrainedWidth width: CGFloat ,msg: String) -> CGFloat {
          let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
          let boundingBox = msg.boundingRect(with: constraintRect, options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: [NSAttributedString.Key.font: 16], context: nil)
          return ceil(boundingBox.height)
      }
    
    func calculateTextHeight(for text: String, width: CGFloat) -> CGFloat {
        let label = UILabel()
        label.numberOfLines = 0  // 允许多行
        label.font = .systemFont(ofSize: 16)
        // 设置文本
        label.text = text
        // 计算所需的高度
        let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude)
        let boundingBox = label.sizeThatFits(constraintRect)
        
        return boundingBox.height
    }
    
    func reloadModels(){//刷新这里是为了重新根据是否展开计算contentH
        
        models.forEach { model in
            print("文本展开状态22: = \(model.isOpen)")
            var contentH: CGFloat = contentHeight(model.content)
            //按照一行高度20 计算，当高度超过5行需要显示全文按钮
            var openBtnH: CGFloat = 40
            if ceil(contentH / 20 ) > 5{
                openBtnH = 25
                if model.isOpen == true {
                    contentH = contentHeight(model.content)
                }else{
                    contentH = 20 * 5
                }
            }else{
                openBtnH = 0
                contentH = contentHeight(model.content)
            }
            model.contentHeight = contentH
            model.cellHeight = contentH + nameH + padding * 3 + openBtnH + model.collectionHeight
        }
    }
}
